﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace Trade.Library.Logs
{
    /// <summary>
    /// 
    /// </summary>
    public abstract class LogFactoryBase : ILogFactory
    {
        /// <summary>
        /// 获取配置文件的路径。
        /// </summary>
        protected string ConfigFile { get; private set; }

        /// <summary>
        /// 初始化一个新的 <see cref="LogFactoryBase"/> 类.
        /// </summary>
        /// <param name="configFile">config文件</param>
        protected LogFactoryBase(string configFile)
        {
            //如果config文件路径是绝对路径
            if (Path.IsPathRooted(configFile))
            {
                ConfigFile = configFile;
                return;
            }
            //如果文件不是采用'\'进行分割，说明不是windows文件结构，配置文件采用unix的
            if (Path.DirectorySeparatorChar != '\\')
            {
                configFile = Path.GetFileNameWithoutExtension(configFile) + ".unix" + Path.GetExtension(configFile);
            }
            //生成文件的绝对路径，相对路径从程序的根目录下开始
            var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFile);
            //如果存在文件
            if (File.Exists(filePath))
            {
                ConfigFile = filePath;
                return;
            }
            //生成文件的绝对路径，相对路径从程序的根目录下的config文件夹开始
            filePath = Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config"), configFile);
            //如果存在文件
            if (File.Exists(filePath))
            {
                ConfigFile = filePath;
                return;
            }

            ConfigFile = configFile;
            return;

        }

        /// <summary>
        /// 获取一个ILog实例
        /// </summary>
        /// <param name="name">名称</param>
        /// <returns></returns>
        public abstract ILog GetLog(string name);
    }

}
